package cn.ondraw.ragflow.service;

import cn.ondraw.ragflow.pojo.request.*;
import cn.ondraw.ragflow.pojo.response.*;
import cn.ondraw.ragflow.pojo.request.*;
import cn.ondraw.ragflow.pojo.response.*;
import cn.ondraw.ragflow.pojo.request.*;
import cn.ondraw.ragflow.pojo.response.*;
import org.springframework.http.ResponseEntity;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;

public interface DocumentService {

    /**
     * 上传文档
     *
     * @param datasetId 关联的数据集 ID
     * @param files     要上传的文件列表
     * @return 上传文档的响应对象
     * @throws IOException 文件处理异常
     */
    UploadDocumentsResponse uploadDocuments(String datasetId, MultipartFile[] files) throws IOException;

    /**
     * 更新文档
     *
     * @param datasetId  关联的数据集 ID
     * @param documentId 要更新的文档 ID
     * @param request    更新文档的请求对象
     * @return 更新文档的响应对象
     */
    UpdateDocumentResponse updateDocument(String datasetId, String documentId, UpdateDocumentRequest request);

    /**
     * 下载文档
     *
     * @param datasetId  关联的数据集 ID
     * @param documentId 要下载的文档 ID
     * @return 文档内容的字节数组
     */
    ResponseEntity<byte[]> downloadDocument(String datasetId, String documentId);

    /**
     * 列出文档
     *
     * @param request 列出文档的请求对象
     * @return 列出文档的响应对象
     */
    ListDocumentsResponse listDocuments(ListDocumentsRequest request);

    /**
     * 删除文档
     *
     * @param datasetId 关联的数据集 ID
     * @param request   删除文档的请求对象
     * @return 删除文档的响应对象
     */
    DeleteDocumentsResponse deleteDocuments(String datasetId, DeleteDocumentsRequest request);

    /**
     * 解析文档
     *
     * @param datasetId 数据集 ID
     * @param request   解析文档的请求对象
     * @return 解析文档的响应对象
     */
    ParseDocumentsResponse parseDocuments(String datasetId, ParseDocumentsRequest request);

    /**
     * 停止解析文档
     *
     * @param datasetId 关联的数据集 ID
     * @param request   停止解析文档的请求对象
     * @return 停止解析文档的响应对象
     */
    StopParsingDocumentsResponse stopParsingDocuments(String datasetId, StopParsingDocumentsRequest request);
}
